﻿#include "SerialPortManager.h"

SerialPortManager::SerialPortManager(QObject* parent) :QSerialPort(parent)
{
	initSerialPort();//初始化串口连接参数
	listenerState = false;//默认默认监听状态为false
	connect(this, &QSerialPort::readyRead, this, &SerialPortManager::readData);//连接接收数据的函数
}

SerialPortManager::~SerialPortManager()
{
	stopListener();//关闭监听器
	disconnect();//断开全部连接本串口信号的槽函数
}

bool SerialPortManager::sendData(QByteArray data)//发送数据
{
	if (!isOpen())
	{
		logSaver->saveLog(QStringLiteral("%1：串口未打开").arg(objectName()), LogSaver::Debug);
		return false;
	}
	if (write(data) == -1)
	{
		logSaver->saveLog(QStringLiteral("%1：串口写入数据失败").arg(objectName()), LogSaver::Debug);
		return false;
	}
	flush();
	logSaver->saveLog(QStringLiteral("%1：串口发送数据：%2").arg(objectName()).arg((QString)data.toHex()), LogSaver::Debug);
	return true;
}

bool SerialPortManager::startListener()//打开串口监听器
{
	if (listenerState)
	{
		return true;//如果已经开启串口监听器，则什么也不做
	}
	if (!open(QSerialPort::ReadWrite))
	{
		logSaver->saveLog(QStringLiteral("%1：打开串口监听失败").arg(objectName()));
		return false;
	}
	listenerState = true;
	logSaver->saveLog(QStringLiteral("%1：打开串口监听成功").arg(objectName()));
	return true;
}

void SerialPortManager::stopListener()//关闭串口监听器
{
	if (!listenerState)
	{
		return;//如果已经关闭串口监听器，则什么也不做
	}
	listenerState = false;
	close();
	logSaver->saveLog(QStringLiteral("%1：关闭串口监听成功").arg(objectName()));
	return;
}

bool SerialPortManager::isListening()
{
	return listenerState;
}

void SerialPortManager::readData()//接收数据
{
	QByteArray data = readAll();
	emit dataReceived(data);
}
void SerialPortManager::initSerialPort()
{
  //在这里填入串口的默认初始化参数
	setPortName("COM1");//端口名称COM1
	setBaudRate(9600);//波特率9600
	setParity(QSerialPort::NoParity);//无校验
	setDataBits(QSerialPort::Data8);//8数据位
	setStopBits(QSerialPort::OneStop);//1停止位
	setFlowControl(QSerialPort::NoFlowControl);//无流控制
}
